/**
 * Provides workflow support for the content framework. The main entry point for 
 * the workflow API is {@link lumis.content.workflow.IWorkflowManager}, 
 * available in {@link lumis.content.ContentManagerFactory#getWorkflowManager()}. 
 * <p>
 * To define a custom workflow, create a directory inside the 
 * <code>&lt;lumisdata&gt;/def</code> structure, and in that directory create a 
 * <code>workflowdefinition.xml</code> file (refer to 
 * <code>workflowdefinition.xsd</code> for details on creating 
 * the workflow definition XML file). 
 * Inside the custom workflow's directory you may also create a 
 * <code>strings</code> directory with the strings resources for
 * this custom workflow.
 * </p>
 * <p>
 * A workflow may contain one or more states. To allow the change of states,
 * transitions must be defined. Each transition represents a directed navigation 
 * between two states. A comparison between the workflow and a 
 * <a href="http://en.wikipedia.org/wiki/Graph_%28mathematics%29#Directed_graph">directed graph</a>
 * can be made: the workflow's states would be the graph's vertices or nodes;
 * and the workflow's transitions would be the graph's edges or lines.
 * </p>
 * <p>
 * States may be defined as being one of the following special state types:
 * <ul>
 * <li><code>start</code>: This is the initial state of the workflow.
 * New content will always start in this state (but they may perform
 * a transition while being added, in this case their first <em>persisted</em>
 * state may be other).</li>
 * <li><code>published</code>: Only contents in states of this type are
 * published.</li>
 * <li><code>archived</code>: When a published content reaches its
 * end of expiration date-time and a transition from its current
 * state to a <code>archivedState</code> exists, that transition is 
 * automatically performed. Using this feature you can automatically organize
 * contents that were expired while published.</li>
 * </ul>
 * </p>
 * <p>
 * One or more roles may be specified for a workflow. The roles are used to
 * configure permissions to the workflow's states and transitions. You apply
 * permission for a role to access contents in a state by configuring the
 * permission in that state. To allow a role to perform a state change through
 * a defined transition, configure the permission in that transition. There
 * are two scopes of permissions:
 * <ul>
 * <li><code>assignedTo</code>: The role has the corresponding permission only
 * if the current principal assigned to the content is the user or one of
 * the groups he is member of; or if the content has no principal assigned to it.</li>  
 * <li><code>all</code>: The role always has permission, independently of
 * the principal assigned to the content.</li>
 * </ul>
 * </p>
 * 
 * @version $Revision: 7374 $ $Date: 2007-06-12 15:51:06 -0300 (Tue, 12 Jun 2007) $
 * @since 4.0.0
 */
package lumis.content.workflow;